#include <stdio.h>
#include <unistd.h>
#include "cmsis_os2.h" 
#include "iot_gpio.h" 
#include "iot_gpio_ex.h" 
#include "ohos_init.h"

// 定义按键的 GPIO 
#define BUTTON_F1_GPIO 5
//定义 LED 灯的" GPIO
#define LED_GPIO 8
/* led 灯的状态*/
static int led_status= 0;

static void Button_F1_Pressed(void *arg);   // 提前声明

static void Init_Button(void)
{
//初始化 F1 按钮为输入,上拉方式
    IoTGpioInit(BUTTON_F1_GPIO);
    IoTGpioSetFunc(BUTTON_F1_GPIO, IOT_GPIO_FUNC_GPIO_5_GPIO);
    IoTGpioSetDir(BUTTON_F1_GPIO, IOT_GPIO_DIR_IN);
    IoTGpioSetPull(BUTTON_F1_GPIO, IOT_GPIO_PULL_UP);
    /* 设备 GPIO 的中断:边缘触发 ,下降沿 ,回调函数*/
    IoTGpioRegisterIsrFunc(BUTTON_F1_GPIO, IOT_INT_TYPE_EDGE,
    IOT_GPIO_EDGE_FALL_LEVEL_LOW, Button_F1_Pressed, NULL);
}

// 初始化LED灯
static void Init_Led()
{
// 初始化 led
    IoTGpioInit(LED_GPIO);
    IoTGpioSetFunc(LED_GPIO, IOT_GPIO_FUNC_GPIO_8_GPIO);
    IoTGpioSetDir(LED_GPIO,IOT_GPIO_DIR_OUT);
}

static void Button_F1_Pressed(void *arg)
{
    (void)arg;
    usleep(10 * 1000);//延迟 10ms,消抖
    IotGpioValue F1Value;
    IoTGpioGetInputVal(BUTTON_F1_GPIO,&F1Value );
    //消抖后再次判断电平
    if(F1Value == IOT_GPIO_VALUE0)
    {
        printf("pressed\n");
        if(led_status == 1)
        {
            printf("turn off led\n");
            IoTGpioSetOutputVal(LED_GPIO,0 );
            led_status = 0;
        }
        else
        {
            printf("turn on led\n");
            IoTGpioSetOutputVal(LED_GPIO,1 );
            led_status = 1;
        }
    }
}

static void Button_Interrupt_Demo(void)
{
    Init_Button();
    Init_Led();
}

APP_FEATURE_INIT(Button_Interrupt_Demo);